package demo_day3;

import org.apache.commons.lang3.math.NumberUtils;
import org.apache.kafka.clients.producer.Partitioner;
import org.apache.kafka.common.Cluster;

import java.util.Map;

/*
    如果你的代码是系统使用的，那么基本都要取 继承或者实现 系统里面的类或者接口
*/

public class Mypartitioner implements Partitioner {
                                // kafka生产者之数据可靠性 ack应答机制   acks参数配置  0 1 2
    @Override
    public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
        // 根据具体的value,识别最后一个字符，是不是奇数或者偶数，然后进行分区的指明
        // 1、先将 value转为string 方便处理
        String vStr = value.toString();
        // 2、获取vStr中的最后一个字符（特别常用）
        String endStr = vStr.substring(vStr.length() - 1);
        // 3、判断尾数的奇偶，但之前要判断是否为数字
        if (NumberUtils.isDigits(endStr)){
            // 纯数字
//            if (Integer.parseInt(endStr) % 2 == 1){
//                return 1;
//            }else {
//                return 0;
//            }
            return Integer.parseInt(endStr) % 2 == 1 ? 1 : 0;
        }else {
            // 非数字
            return 2;
        }
    }

    @Override
    public void close() {
        // 不用管
    }

    @Override
    public void configure(Map<String, ?> map) {
        // 不用管
    }
}
